
因為這邊開發的是 Component,所以這次會用 Cypress Component Testing。
設置專案在 apps/ 底下。
E2E 專案 可以放在對應 application 專案底下 或是 像這次是獨立放,
端看團隊習慣。
# move to apps/ folder
cd apps
# create new folder call e2e/ for end-to-end testing
mkdir e2e && cd $_
# init project
yarn init -y
package.json
{
  "name": "e2e",
  "version": "0.0.0",
  "private": true,
  "devDependencies": {
    "carousel": "*",
    "tsconfig": "*",
    "cypress": "latest",
    "react-scripts": "latest",
    "ts-loader": "latest",
    "typescript": "latest",
    "webpack": "latest"
  },
  "browserslist": "defaults"
}
tsconfig.json
{
  "extends": "tsconfig/nextjs.json",
  "compilerOptions": {
    "types": ["cypress", "node"]
  },
  "include": ["."]
}
接著,執行 cypress。
yarn cypress open
選擇測試的項目。
選擇框架類型。
cypress 會幫你配置需要安裝的套件。
自動生成基礎配置。
選擇測試的瀏覽器。
建立空的規格。
我們用 carousel 來進行測試。
開啟規格。
看到這樣就表示成功運行規格了。
使用 turborepo 時,標注 "*" 的套件表示是內部套件,
內部套件可以直接使用 typescript,
但在 cypress 沒辦法直接編譯,
我們要用 webpack 幫我們處理 ts 編譯的部分。
webpack.config.ts
export default {
  module: {
    rules: [
      {
        test: /\.tsx?$/,
        use: "ts-loader",
        exclude: /node_modules/,
      },
    ],
  },
  resolve: {
    extensions: [".tsx", ".ts", ".js"],
  },
};
cypress.config.ts
import { defineConfig } from "cypress";
import webpackConfig from "./webpack.config";
export default defineConfig({
  component: {
    devServer: {
      framework: "create-react-app",
      bundler: "webpack",
      webpackConfig,
    },
  },
});
接著,我們試著運行 carousel 試試看。
Carousel.cy.tsx
import { Carousel } from "carousel";
describe("Carousel.cy.ts", () => {
  it("mount", () => {
    cy.mount(
      <Carousel aria-label="Highlighted television shows" interval={10_000}>
        <Carousel.Button action="toggle">
          {(auto_rotation) =>
            auto_rotation ? "pause auto-rotation" : "start auto-rotation"
          }
        </Carousel.Button>
        <Carousel.Button action="next">next slide</Carousel.Button>
        <Carousel.Button action="prev">previous slide</Carousel.Button>
        <Carousel.Items>
          <Carousel.Item>
            Dynamic Europe: Amsterdam, Prague, Berlin
          </Carousel.Item>
          <Carousel.Item>Travel to Southwest England and Paris</Carousel.Item>
          <Carousel.Item>
            Great Children's Programming on Public TV
          </Carousel.Item>
          <Carousel.Item>Foyle’s War Revisited</Carousel.Item>
          <Carousel.Item>Great Britain Vote: 7 pm Sat.</Carousel.Item>
          <Carousel.Item>
            Mid-American Gardener: Thursdays at 7 pm
          </Carousel.Item>
        </Carousel.Items>
      </Carousel>
    );
  });
});
